import { defineConfig } from 'eslint/config';
import globals from 'globals';
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import pluginReact from 'eslint-plugin-react';
import eslintConfigPrettier from 'eslint-config-prettier';
import prettier from 'eslint-plugin-prettier';
export default defineConfig([
  { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] },
  {
    files: ['**/*.js'],
    languageOptions: { sourceType: 'commonjs' },
    rules: { 'no-undef': 'off' },
  },
  {
    files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
    languageOptions: { globals: { ...globals.browser, ...globals.node } },
    settings: {
      react: {
        version: 'detect',
      },
    },
    plugins: pluginReact,
  },
  {
    files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
    plugins: { js },
    extends: ['js/recommended'],
  },
  tseslint.configs.recommended,
  pluginReact.configs.flat.recommended,
  eslintConfigPrettier, // 禁用与 Prettier 冲突的 ESLint 规则
  {
    plugins: {
      prettier, // 启用 Prettier 插件
    },
  },
  {
    rules: {
      // 禁止使用 var
      'no-var': 'error',
      //将 Prettier 作为 ESLint 规则运行
      'prettier/prettier': 'error',
      // 禁止多余的分号
      'no-extra-semi': 'error',
      // 避免意外的多行代码
      'no-unexpected-multiline': 'error',
      // 强制使用 2 个空格缩进
      indent: ['error', 2],
      // 强制使用单引号
      quotes: ['error', 'single'],
      // 强制使用分号结束语句
      semi: ['error', 'always'],
      // 禁止使用未定义的变量
      'no-undef': 'error',
      // 检测未使用的变量
      'no-unused-vars': 'error',
      // 强制使用全等和不全等运算符
      eqeqeq: 'error',
      // 生产环境禁止使用 console 语句
      'no-console': 'warn',
      // 强制在对象字面量属性中键和值之间使用一致的空格
      'key-spacing': ['error', { beforeColon: false, afterColon: true }],
      // 强制在关键字前后使用一致的空格
      'keyword-spacing': ['error', { before: true, after: true }],
      // 强制在函数括号前使用一致的空格
      'space-before-function-paren': [
        'error',
        {
          anonymous: 'always',
          named: 'never',
          asyncArrow: 'always',
        },
      ],
      // 强制在圆括号内使用一致的空格
      'space-in-parens': ['error', 'never'],
      // 强制在中括号内使用一致的空格
      'array-bracket-spacing': ['error', 'never'],
      // 强制在大括号内使用一致的空格
      'object-curly-spacing': ['error', 'always'],
      // 强制在逗号后使用一致的空格
      'comma-spacing': ['error', { before: false, after: true }],
      // 强制在分号后使用一致的空格
      'semi-spacing': ['error', { before: false, after: true }],
    },
  },
]);
